home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech's Sprocket™ / SprocketGX / Lib / Preferences.cp < prev    next >
Encoding:
Text File  |  1994-10-17  |  2.1 KB  |  84 lines  |  [TEXT/MMCC]

  1. /*
  2.     File:        Preferences.cp
  3.  
  4.     Contains:    minimalist preference file routines
  5.                 
  6.     Written by: Dave Falkenburg
  7.  
  8.     Copyright:    © 1993-94 by Dave Falkenburg, all rights reserved.
  9.  
  10.     Change History (most recent first):
  11.      
  12.  */
  13.  
  14. #ifdef    SystemSevenOrLater
  15. #undef    SystemSevenOrLater
  16. #endif
  17. #define    SystemSevenOrLater    1
  18.  
  19. #include    <Types.h>
  20. #include    <Files.h>
  21. #include    <Folders.h>
  22. #include    <Resources.h>
  23. #include     <Processes.h>
  24. #include    <TextUtils.h>
  25.  
  26. #include    "AppLib.h"
  27.  
  28. short OpenPreferencesResFile(void)
  29. {
  30.     OSErr            err;
  31.     short            prefsVRefNum;
  32.     long            prefsDirID;
  33.     HParamBlockRec    pb;
  34.     short            prefsRefNum;
  35.     Str255            prefsFileName;
  36.     
  37.     err = FindFolder(kOnSystemDisk,kPreferencesFolderType,kCreateFolder,&prefsVRefNum,&prefsDirID);
  38.  
  39.     if (err != noErr)    //    Couldn’t find preferences folder, something is wrong
  40.         return(-1);
  41.  
  42.     GetIndString(prefsFileName,kPreferencesFileStrings,kPreferencesFileName);
  43.  
  44.     //    Try openning the Preferences file
  45.             
  46.     prefsRefNum = HOpenResFile(prefsVRefNum,prefsDirID,prefsFileName,fsRdWrPerm); 
  47.     if (prefsRefNum == -1)
  48.         {
  49.         //    Get the application’s creator
  50.         
  51.         ProcessInfoRec        processInfo;
  52.         ProcessSerialNumber    currentProc = {0,kCurrentProcess};
  53.         
  54.         processInfo.processInfoLength = sizeof(processInfo);
  55.         processInfo.processName = nil;
  56.         processInfo.processAppSpec = nil;
  57.         
  58.         (void) GetProcessInformation(¤tProc,&processInfo);
  59.         
  60.         //    Couldn’t open prefs file, try making a new one
  61.         
  62.         HCreateResFile(prefsVRefNum,prefsDirID,prefsFileName);
  63.         pb.fileParam.ioNamePtr = prefsFileName;
  64.         pb.fileParam.ioVRefNum = prefsVRefNum;
  65.         pb.fileParam.ioDirID = prefsDirID;
  66.         pb.fileParam.ioFDirIndex = 0;
  67.         err = PBHGetFInfo(&pb,false);
  68.         
  69.         pb.fileParam.ioNamePtr = prefsFileName;
  70.         pb.fileParam.ioVRefNum = prefsVRefNum;
  71.         pb.fileParam.ioDirID = prefsDirID;
  72.         pb.fileParam.ioFDirIndex = 0;
  73.         pb.fileParam.ioFlFndrInfo.fdType = 'PREF';
  74.         pb.fileParam.ioFlFndrInfo.fdCreator = processInfo.processSignature;
  75.         pb.fileParam.ioFlFndrInfo.fdFlags = 0;
  76.         err = PBHSetFInfo(&pb,false); 
  77.     
  78.         if (ResError() == noErr)    //    Try opening the newly created prefs file if we made it
  79.             prefsRefNum = HOpenResFile(prefsVRefNum,prefsDirID,prefsFileName,fsRdWrPerm);            
  80.         }
  81.         
  82.     return(prefsRefNum);
  83. }
  84.